/*
 * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved.
 * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 */
package com.sun.corba.se.spi.orb;

import java.util.List;
import java.util.LinkedList;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Properties;

import com.sun.corba.se.impl.orb.ParserAction;
import com.sun.corba.se.impl.orb.ParserActionFactory;

public class PropertyParser {
    private List actions;

    public PropertyParser() {
        actions = new LinkedList();
    }

    public PropertyParser add(String propName, Operation action, String fieldName) {
        actions.add(ParserActionFactory.makeNormalAction(propName, action, fieldName));
        return this;
    }

    public PropertyParser addPrefix(String propName, Operation action, String fieldName, Class componentType) {
        actions.add(ParserActionFactory.makePrefixAction(propName, action, fieldName, componentType));
        return this;
    }

    /** Return a map from field name to value.
    */
    public Map parse(Properties props) {
        Map map = new HashMap();
        Iterator iter = actions.iterator();
        while (iter.hasNext()) {
            ParserAction act = (ParserAction) (iter.next());

            Object result = act.apply(props);

            // A null result means that the property was not set for
            // this action, so do not override the default value in this case.
            if (result != null)
                map.put(act.getFieldName(), result);
        }

        return map;
    }

    public Iterator iterator() {
        return actions.iterator();
    }
}
